Le Bloc Note pour apprendre à coder en hexadécimal :¶
Nous savons maintenant que de nos jours les ordinateurs comme pratiquement tous les systèmes numériques communiquent en faisant circuler des informations sous la forme de mots binaires à 8 bits = 1 octet que l'on nomme bytes même si cela n'a pas toujours été le cas : https://fr.wikipedia.org/wiki/Byte.
Pour un humain (normalement constitué), il est fastidieux d'écrire ou de déchiffré à la volée de telles trames d'informations directement au format binaire :
010011100101001101001001001011000010000001100011001001110110010101110011011101000010000001100011011011110110111101101100001000000100001
Le format hexadécimal présente de façon plus condensée un message binaire constitué d'une suite d'octects.
Système hexadécimal :¶
C’est un système de base $16$ qui utilise donc seize symboles différents :
$$ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F$$Pour distinguer un nombre hexadécimal on indique le code 0x (ou le symbole #) avant le nombre ou l’indice $_{16}$ (ou $_h$) après le nombre.
Les lettres A à F correspondent respectivement au nombre décimaux ? $10, 11, 12, 13, 14, 15$
$AC53_{16}$ = $10 \times 16^3 + 12 \times 16^2 + 5 \times 16^1 + 3 \times 16^0$
Correspondance entre nombres de différentes bases :¶

Changement de base :¶
Conversion d’un nombre hexadécimal en binaire.¶
Chaque symbole du nombre écrit dans le système hexadécimal est remplacé par son équivalent écrit dans le système binaire.
Exemple : Convertir $ECA_{16}$ = ${1110_2\over E_{16}}{1100_2\over C_{16}}{1010_2\over A_{16}}$ = $1110 1100 1010_2$
Conversion d’un nombre binaire en hexadécimal.¶
C’est l’inverse de la précédente. Il faut donc regrouper les 1 et les 0 du nombre par 4 en commençant par la droite, quitte à rajouter des 0 à gauche, puis chaque groupe est remplacé par le symbole hexadécimal correspondant.
Exemple : Convertir $1100001101111_2$ = ${1_{16}\over 0001_2}{8_{16}\over 1000_2}{6_{16}\over 0110_2}{F_{16}\over 1111_2}$ = $186F_{16}$
A faire vous même n°1 :
Recoder en hexadécimal la trame d'information binaire donnée au début de ce notebook.
A faire vous même n°2 :
L'objectif de cet exercice est de convertir des nombres entiers donnés en décimal, en binaire ou en héxadécimal, pour dessiner une image matricielle dans un quadrillage $8 \times 8$.
Chaque case de l'image correspond à un bit. Une ligne de l'image fait 8 cases, soit 8 bits ou 1 octet.
Lorsque le bit est à 1 alors la case est noire, lorsque le bit est à 0 alors la case est blanche.
Exemple :¶

A faire vous même : compléter le quadrillage pour découvrir l'image...¶

Vérification :¶
Un moyen de vérifer si on n'a pas fait d'erreur est de fournir un nombre qui pourrait être un code de validation.
Cette méthode n'est pas fiable à 100% mais elle permet très souvent de savoir si une erreur a été commise.
Pour chaque colonne, on compte le nombre de 1 ; si ce nombre est pair, on marque 0 ; s'il est impair, on marque 1. On obtient ainsi un nombre 8 bits (1 pour chaque colonne).
Le code de validation de l'image ci-dessus est égal à 202. Utilisez-le pour valider votre codage.


print()
Fonctions de conversion de Python :¶
La fonction bin() permet de convertir un nombre en binaire :
bin(91)
'0b1011011'
bin(0x5b)
'0b1011011'
La fonction hex() permet de convertir un nombre en hexadécimal :
hex(91)
hex(0b1011011)
La fonction int() permet de convertir un nombre en décimal :
int(0b1111010111)
int(0x5b)
Codage Hexadécimal des couleurs :¶
Les couleurs RVB peuvent être exprimées dans différents formats comme : (34,255,67) ou #90FF56.
(34,255,67) indique les composantes Rouge=34, Vert=255, Bleu=67 avec des nombres en base 10.
Tandis que #90FF56 indique Rouge=90, Vert=FF, Bleu=56 en base 16.
Le préfixe # indique seulement qu'il s'agit d'une écriture hexadécimale.
A faire vous même n°3 :
- Les deux codes proposés ci-dessus, (34,255,67) et #90FF56, représentent-ils la même couleur ?
.....................................................
Vérifiez votre réponse avec le module ipythonblocks et son sélectionneur de couleur intégré :
Sur iPad, vérifier si le module
ipythonblocksest déjà installé :%pip listSinon il faut l'installer en faisant :
%pip install ipythonblocks
from ipythonblocks import show_color, embed_colorpicker
%pip list
Package Version --------------------------------- -------- appnope 0.1.0 asn1crypto 0.24.0 astropy 4.0 atomicwrites 1.2.1 attrs 18.2.0 backcall 0.1.0 bleach 3.0.2 bokeh 1.4.0 certifi 2019.3.9 cffi 1.11.5 chardet 3.0.4 cryptography 2.7 cycler 0.10.0 decorator 4.3.0 defusedxml 0.5.0 docutils 0.14 entrypoints 0.3 flit 1.3 html5lib 1.0.1 idna 2.8 ipykernel 5.1.0 ipysheet 0.3.1 ipython 7.3.0 ipython-genutils 0.2.0 ipywidgets 7.4.2 jedi 0.13.2 Jinja2 2.10 jsonschema 2.6.0 jupyter 1.0.0 jupyter-client 5.2.4 jupyter-console 6.0.0 jupyter-contrib-core 0.3.3 jupyter-contrib-nbextensions 0.5.1 jupyter-core 4.4.0 jupyter-highlight-selected-word 0.2.0 jupyter-latex-envs 1.4.6 jupyter-nbextensions-configurator 0.4.1 kiwisolver 1.0.1 lxml 4.4.2 MarkupSafe 1.1.0 matplotlib 3.0.3 mistune 0.8.4 more-itertools 4.3.0 mpmath 1.1.0 nbconvert 5.4.1 nbformat 4.4.0 notebook 5.7.6 numpy 1.16.0 packaging 20.1 pandas 0.24.2 pandocfilters 1.4.2 parso 0.3.1 pexpect 4.6.0 pickleshare 0.7.5 Pillow 6.0.0 pip 19.1.1 pluggy 0.8.0 prometheus-client 0.5.0 prompt-toolkit 2.0.7 ptyprocess 0.6.0 py 1.7.0 pycparser 2.19 Pygments 2.3.1 pyOpenSSL 19.0.0 pyparsing 2.3.1 pytest 4.0.2 python-dateutil 2.7.5 pytoml 0.1.20 pytz 2018.9 PyYAML 5.1 pyzmq 17.1.2 qtconsole 4.4.3 requests 2.21.0 Send2Trash 1.5.0 setuptools 39.0.1 simplegeneric 0.8.1 six 1.12.0 sympy 1.5.1 terminado 0.8.1 testpath 0.4.2 tornado 6.0.1 traitlets 4.3.2 urllib3 1.24.1 wcwidth 0.1.7 webencodings 0.5.1 widgetsnbextension 3.4.2 Note: you may need to restart the kernel to use updated packages.
show_color(34,255,67)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-12-e5c589e02286> in <module> ----> 1 show_color(34,255,67) NameError: name 'show_color' is not defined
%pip install ipythonblocks
Requirement already satisfied: ipythonblocks in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (1.9.0) Requirement already satisfied: ipython>=4.0 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from ipythonblocks) (7.3.0) Requirement already satisfied: notebook>=4.0 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from ipythonblocks) (5.7.6) Requirement already satisfied: requests>=1.0 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from ipythonblocks) (2.21.0) Requirement already satisfied: jinja2 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (2.10) Requirement already satisfied: tornado<7,>=4.1 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages/tornado-6.0.1-py3.7-macosx-12.1-iPad6,7.egg (from notebook>=4.0->ipythonblocks) (6.0.1) Requirement already satisfied: pyzmq>=17 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (17.1.2) Requirement already satisfied: ipython_genutils in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (0.2.0) Requirement already satisfied: traitlets>=4.2.1 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (4.3.2) Requirement already satisfied: jupyter_core>=4.4.0 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (4.4.0) Requirement already satisfied: jupyter_client>=5.2.0 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (5.2.4) Requirement already satisfied: nbformat in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (4.4.0) Requirement already satisfied: nbconvert in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (5.4.1) Requirement already satisfied: ipykernel in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (5.1.0) Requirement already satisfied: Send2Trash in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (1.5.0) Requirement already satisfied: terminado>=0.8.1 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (0.8.1) Requirement already satisfied: prometheus_client in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from notebook>=4.0->ipythonblocks) (0.5.0) Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from requests>=1.0->ipythonblocks) (3.0.4) Requirement already satisfied: urllib3<1.25,>=1.21.1 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from requests>=1.0->ipythonblocks) (1.24.1) Requirement already satisfied: idna<2.9,>=2.5 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from requests>=1.0->ipythonblocks) (2.8) Requirement already satisfied: certifi>=2017.4.17 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from requests>=1.0->ipythonblocks) (2019.3.9) Requirement already satisfied: MarkupSafe>=0.23 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from jinja2->notebook>=4.0->ipythonblocks) (1.1.0) Requirement already satisfied: decorator in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from traitlets>=4.2.1->notebook>=4.0->ipythonblocks) (4.3.0) Requirement already satisfied: six in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from traitlets>=4.2.1->notebook>=4.0->ipythonblocks) (1.12.0) Requirement already satisfied: python-dateutil>=2.1 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from jupyter_client>=5.2.0->notebook>=4.0->ipythonblocks) (2.7.5) Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from nbformat->notebook>=4.0->ipythonblocks) (2.6.0) Requirement already satisfied: mistune>=0.8.1 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from nbconvert->notebook>=4.0->ipythonblocks) (0.8.4) Requirement already satisfied: pygments in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from nbconvert->notebook>=4.0->ipythonblocks) (2.3.1) Requirement already satisfied: entrypoints>=0.2.2 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from nbconvert->notebook>=4.0->ipythonblocks) (0.3) Requirement already satisfied: bleach in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from nbconvert->notebook>=4.0->ipythonblocks) (3.0.2) Requirement already satisfied: pandocfilters>=1.4.1 in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from nbconvert->notebook>=4.0->ipythonblocks) (1.4.2) Requirement already satisfied: testpath in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from nbconvert->notebook>=4.0->ipythonblocks) (0.4.2) Requirement already satisfied: defusedxml in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from nbconvert->notebook>=4.0->ipythonblocks) (0.5.0) Requirement already satisfied: ptyprocess; os_name != "nt" in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from terminado>=0.8.1->notebook>=4.0->ipythonblocks) (0.6.0) Requirement already satisfied: webencodings in /private/var/mobile/Containers/Data/Application/316ED766-DD38-4609-BFC2-7C91AA389190/Library/lib/python3.7/site-packages (from bleach->nbconvert->notebook>=4.0->ipythonblocks) (0.5.1) Note: you may need to restart the kernel to use updated packages.
Pour plus d'information sur les couleurs utilisées en HTML :
A faire vous même n°4 :
On observe que le module ipythonbloks ne prend pas les codes couleurs au format hexadécimal.
Nous aurions donc besoin d'une fonction python qui prenne en entrée une chaine de caractères correspondante au code hexadécimal d'une couleur et qui renvoie son code convertit au format décimal dans une chaine de caractères en sortie...
Références aux programmes :¶
| Compétences développées | Capacités attendues | Commentaires |
|---|---|---|
| Écriture d’un entier positif dans une base b ⩾ 2 | Passer de la représentation d’une base dans une autre. | Les bases 2, 10 et 16 sont privilégiées. |

Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.
Pour toute question, suggestion ou commentaire : eric.madec@ecmorlaix.fr